package net.tngou.crawler.drug;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang3.math.NumberUtils;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

import net.tngou.c4j.util.HttpUtil;
import net.tngou.cache.CacheEngine;
import net.tngou.cache.TgCacheEngine;
import net.tngou.crawler.util.StringUtil;

/**
 * 好药师网上药店
 * @author tngou@tngou.net
 *
 */
public class COM_Ehaoyao extends BaseCrawler implements CrawlerDrug{
	private static final Logger log= LoggerFactory.getLogger(COM_Ehaoyao.class);
	private String url="http://www.ehaoyao.com/product-{}.html";
	
	

	@Override
	public JSONObject getJson(URL url) {
		log.info("请求页面:{}",url.toString());
		Document doc = HttpUtil.get(url.toString());
		if(doc==null||doc.text().indexOf("你所访问的路径不存在")>0)return null;
		json.put("url", url.toString());
		json.put("onlinepharmacy", onlinepharmacy);
		//唯一值
		String[] uns = url.toString().split("-");
		json.put("un",uns[uns.length-1].replaceAll(".html", "-").split("-")[0]);
		//标签
		Elements etailTitle = doc.getElementsByClass("detailTitle");
		if(etailTitle.first()!=null)
		{		
			Elements as = etailTitle.first().getElementsByTag("a");
			List<String> list = new ArrayList<>();
			for (int i = 1; i < as.size(); i++) {
				list.add(as.get(i).text());
			}				
			json.put("tag", list);
		}
		//图片
		Element smallPic = doc.getElementById("thumblist");
		if(smallPic!=null)
		{
			Elements imgs = smallPic.getElementsByTag("a");
			List<String> list = new ArrayList<>();
			imgs.forEach(e->{
				String rel = e.attr("rel");
				if(StringUtil.isNotEmpty(rel))
				{
					JSONObject jsonObject=(JSONObject) JSON.parse(rel);
					if(jsonObject!=null) {
						String src=jsonObject.getString("largeimage");
						if(StringUtil.isNotEmpty(src))
						list.add(src);
					}
				}
			});
			json.put("picture", list);
		}
		//价格
		Elements price = doc.getElementsByClass("price");
		if(price.first()!=null)
		{	
			String value = price.first().text();	
			json.put("price", getPrice(value));
			
		}
		//类型	
		
		//说明书
		
		Elements instruction = doc.getElementsByClass("proDetailInfo");
		if(instruction.first()!=null)
		{
			JSONObject instructions = instructions(instruction.first());
			Elements tabContent = doc.getElementsByClass("tabContent");
			if(tabContent.first()!=null) instructions = instructions(tabContent.first(),instructions);
			json.put("instructions",instructions );
			if(instructions!=null)
			{
				String s = instructions.getString("药品标识");
				if(StringUtil.isNotEmpty(s))
				{
					if(s.toUpperCase().indexOf("RX")>=0||s.toUpperCase().indexOf("处方药")>=0)
					{
						json.put("ptype", Ptype.RX处方药.ordinal());
					}else if(s.toUpperCase().indexOf("OTC")>=0)
					{
						json.put("ptype", Ptype.OTC非处方甲类.ordinal());				
					}
				}			
			}
		}
		return json;
	}
	private JSONObject instructions(Element element) {
		JSONObject json = new JSONObject(true);
		Elements span = element.getElementsByTag("span");
		for (Element e : span) {
			String[] es = StringUtil.split(e.text(), "：");
			if(es.length==2)
			{
				String key=StringUtil.cleanKey(es[0]);
				String value=StringUtil.RemoveEmpty(es[1]);
				if(!"检验合格情况".equals(key)&&!"认证情况".equals(key))
				json.put(key, value);
			}
			es = StringUtil.split(e.text(), ":");
			if(es.length==2)
			{
				String key=StringUtil.cleanKey(es[0]);
				String value=StringUtil.RemoveEmpty(es[1]);
				json.put(key, value);
			}
		
		}
		
		
		return name_number(json);
	}
	private JSONObject instructions(Element element,JSONObject json) {
		Elements trs = element.getElementsByTag("tr");
		for (Element tr : trs) {
			Elements tds = tr.getElementsByTag("td");
			if(tds.size()==2)
			{
				if(!"产品名称".equals(tds.get(0).text()))
					json.put(tds.get(0).text(), tds.get(1).text());
			}
		}
		return name_number(json);
	}
}

	

